import { defineConfig, type UserConfigExport } from '@tarojs/cli'
import { UnifiedViteWeappTailwindcssPlugin } from 'weapp-tailwindcss/vite'
import tailwindcss from '@tailwindcss/postcss'
import devConfig from './dev'
import prodConfig from './prod'
import path from 'path'
import vitePluginImp from "vite-plugin-imp";
import packageJson from "../package.json";

// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
export default defineConfig<'vite'>(async (merge, { command, mode }) => {
  console.log('command111111111111111', command, mode)
  const baseConfig: UserConfigExport<'vite'> = {
    projectName: 'game-miniprogram-new',
    date: '2025-9-7',
    designWidth: 750,
    deviceRatio: {
      640: 2.34 / 2,
      750: 1,
      375: 2,
      828: 1.81 / 2
    },
    sourceRoot: 'src',
    outputRoot: 'dist',
    plugins: [
      "@tarojs/plugin-generator",
      '@tarojs/plugin-html',
      [
        "@tarojs/plugin-mini-ci",
        {
          // 版本号
          version: packageJson.version,
          // 版本发布描述
          desc: "版本描述",
          // 微信小程序配置
          weapp: {
            appid: "wxe06d3daba0ffbead",
            privateKeyPath: "keys/private.wxe06d3daba0ffbead.key",
            robot: "1",
          },
          // 如需支持其他平台（如支付宝小程序），可添加对应配置
        },
      ],
    ],
    defineConstants: {
    },
    copy: {
      patterns: [
      ],
      options: {
      }
    },
    framework: 'react',
    // compiler: 'vite',
    compiler: {
        type: 'vite',
        vitePlugins: [
            {
                name: 'postcss-config-loader-plugin',
                config(config) {
                // 加载 tailwindcss
                if (typeof config.css?.postcss === 'object') {
                    config.css?.postcss.plugins?.unshift(tailwindcss())
                }
                },
            },
            UnifiedViteWeappTailwindcssPlugin({
                rem2rpx: true,
                tailwindcss: {
                v4: {
                    cssEntries: [
                    // 你 @import "weapp-tailwindcss"; 那个文件绝对路径
                    path.resolve(__dirname, '../src/app.css')
                    ]
                }
                }
            }),
            vitePluginImp({
                libList: [
                    {
                        libName: "@nutui/nutui-react-taro",
                        style: (name) => {
                            return `@nutui/nutui-react-taro/dist/es/packages/${name.toLowerCase()}/style/style.css`;
                        },
                        replaceOldImport: false,
                        camel2DashComponentName: false,
                    },
                ],
            }),
        ]
    },
    mini: {
      postcss: {
        pxtransform: {
          enable: true,
          config: {

          }
        },
        cssModules: {
          enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
          config: {
            namingPattern: 'module', // 转换模式，取值为 global/module
            generateScopedName: '[name]__[local]___[hash:base64:5]'
          }
        }
      },
    },
    h5: {
      publicPath: '/',
      staticDirectory: 'static',

      miniCssExtractPluginOption: {
        ignoreOrder: true,
        filename: 'css/[name].[hash].css',
        chunkFilename: 'css/[name].[chunkhash].css'
      },
      postcss: {
        autoprefixer: {
          enable: true,
          config: {}
        },
        cssModules: {
          enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
          config: {
            namingPattern: 'module', // 转换模式，取值为 global/module
            generateScopedName: '[name]__[local]___[hash:base64:5]'
          }
        }
      },
    },
    rn: {
      appName: 'taroDemo',
      postcss: {
        cssModules: {
          enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
        }
      }
    }
  }

  process.env.BROWSERSLIST_ENV = process.env.NODE_ENV

  if (process.env.NODE_ENV === 'development') {
    // 本地开发构建配置（不混淆压缩）
    return merge({}, baseConfig, devConfig)
  }
  // 生产构建配置（默认开启压缩混淆等）
  return merge({}, baseConfig, prodConfig)
})
